#pragma once

#include "Globals.h"
#include "Point.h"
#include "Size.h"

namespace game_engine { namespace utils
{

/*!
 * \class Rect
 * \brief 
 */
class Rect
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
private:
   Point origin;
   Size size;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    Rect(void);
    Rect(const FLOAT32 coordX, const FLOAT32 coordY, 
        const FLOAT32 h, const FLOAT32 w);
    ~Rect(void);

    // Others
    const Point getInternalRandomPoint(const Point &offset = Point(0.0f, 0.0f));
    const BOOL isPointWithin(const Point &position) const;

    // Getters
    const FLOAT32 getX(void) const;
    const FLOAT32 getY(void) const;
    const FLOAT32 getWidth(void) const;
    const FLOAT32 getHeight(void) const;

    // Setters
    void setX(const FLOAT32 coordX);
    void setY(const FLOAT32 coordY);
    void setWidth(const FLOAT32 w);
    void setHeight(const FLOAT32 h);

private:
    const FLOAT32 randFloat32(FLOAT32 low, FLOAT32 high);

};

}}
